<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>策略模式-算法调用</title>
	</head>
	<body>
		<script>
			// 表单正则验证策略对象
			var InputStrategy = function(){
				var strategy = {
					// 中否为空
					notNull: function(value){
						return /\s+/.test(value) ? '请输入内容' : '';
					},
					// 是否是一个数字
					number: function(value){
						return /^[0-9]+(\.[0-9]+)?$/.test(value) ? '' : '请输入数字';
					},
					// 是否是本地电话
					phone: function(value){
						return /^\d(3)\-\d(8)$|^\d(4)\-\d(7)$/.test(value) ? '' : '请输入正确的电话号码格式，如：010-12345678 或 0418-1234567';
					}
				}
				return {
					// 验证接口 type 算法 value 表单值
					check: function(type, value){
						// 去除收尾空白格
						value = value.replace(/^\s+|\s+$/g,'');
						return strategy[type] ? strategy[type](value) : '没有该类型的检测方法'
					},
					// 添加策略
					addStrategy: function(type, fn){
						strategy[type] = fn;
					}
				}
			}();

			// 拓展 可以延伸算法
			InputStrategy.addStrategy('nickname', function(value){
				return /^[a-zA-Z]\w{3,7}$/.test(value) ? '' : '请输入4-8位昵称，如： YYQH';
			});

			document.getElementsByTagName('input')[1].onclick = function(){
				var value = document.getElementsByTagName('input')[0].value;
				console.log(InputStrategy.check('nickname', value));
			}
		</script>
	</body>
</html>
